/**
 * 全局封装请求
 */
import enums from '@/libs/enums.js'
import Vue from "vue";
import common from '@/libs/common.js'
const UploadUrl = enums.uploadUrl
const DOMAIN_REQUEST_PATH = enums.DOMAIN_REQUEST_PATH
const DOMAIN_REQUEST_PATH_JAVA = enums.DOMAIN_REQUEST_PATH_JAVA
function mergeUrl(url) {
	if (url.indexOf('http') > -1) {
		return url;
	}
	return DOMAIN_REQUEST_PATH + url;
}
function mergeJavaUrl(url) {
	if (url.indexOf('http') > -1) {
		return url;
	}
	return DOMAIN_REQUEST_PATH_JAVA + url;
}


function mergeUploadUrl(url) {
	if (url.indexOf('http') > -1) {
		return url;
	}
	return UploadUrl + url;
}

function innerFlag(url) {
	if (url.indexOf('http') > -1) {
		return false;
	}
	return true;
}

const formatData = data => {


	// #ifdef H5
	if (!(data instanceof FormData)) {
		if (data instanceof Array) {
			return data.map(item => {
				return formatData(item);
			});
		} else if (data instanceof Object) {
			Object.keys(data).forEach(key => {
				const item = data[key];

				if (key != 'managerId' && (item === void 0 || (typeof item === 'string' && !item.length))) {
					delete data[key];
					if (process.env.NODE_ENV === 'development') {
						console.info(`移除空属性:${key}`);
					}
				} else {
					data[key] = formatData(item);
				}
			});
		}
	}
	// #endif

	// #ifdef MP-WEIXIN
	if (data instanceof Array) {
		return data.map(item => {
			return formatData(item);
		});
	} else if (data instanceof Object) {
		Object.keys(data).forEach(key => {
			const item = data[key];

			if (key != 'managerId' && key != 'imei_power_box' && (item === void 0 || (typeof item === 'string' && !item.length))) {
				delete data[key];
				if (process.env.NODE_ENV === 'development') {
					console.info(`移除空属性:${key}`);
				}
			} else {
				data[key] = formatData(item) || "";
			}
		});
	}
	// #endif

	return data;
};
const http = {
	get: (options = {
		url: '',
		data: {}
	}) => {
		return new Promise((resolve, reject) => {
			let url = mergeUrl(options.url);
			let inner = innerFlag(options.url)
			let header = {}
			if (inner == true) {
				header = {
					'Content-Type': 'application/json;charset=UTF-8',
					'Content-Type': 'application/x-www-form-urlencoded',
				}
			}
			uni.request({
				url: url,
				method: 'GET',
				data: formatData(options.data),
				header: header,
				success: res => {
					let resData = {}
					if (res.statusCode == 200) {
						//代表数据请求正常--直接返回报文信息
						resData = res.data
						if (resData.code != 1) {
							if (resData.code == 401) {
								common.loginFailure()
							} else {
								uni.showToast({
									icon: 'none',
									title: resData.msg
								})
							}

						}
					} else if (res.statusCode == 500) {
						//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
						resData = res.data

					}
					resolve(resData);
				},
				fail: (err) => {
					reject(err)
				},
				complete: () => {}
			});
		})
	},

	// post: (options = {
	// 	url: '',
	// 	data: {}
	// }) => {
	// 	return new Promise((resolve, reject) => {
	// 		let url = mergeUrl(options.url);
	// 		uni.request({
	// 			url: url,
	// 			method: 'POST',
	// 			data: Object.keys(formatData(options.data)).map((key) => `${key}=${options.data[key]}`).join('&'),
	// 			header: {
	// 				// 'ACCESS-TOKEN': uni.getStorageSync('token'),
	// 				'content-type': 'application/x-www-form-urlencoded'
	// 			},
	// 			success: res => {
	// 				let resData = {}
	// 				if (res.statusCode == 200) {
	// 					//代表数据请求正常--直接返回报文信息
	// 					resData = res.data
	// 				} else if (res.statusCode == 500) {
	// 					//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
	// 					resData = res.data
	// 				}
	// 				resolve(resData);
	// 			},
	// 			fail: (err) => {
	// 				reject(err)
	// 			},
	// 			complete: () => {}
	// 		});
	// 	})
	// },

	uploadFile: (file) => {
		return new Promise((resolve, reject) => {
			let header = {
				token:uni.getStorageSync('token')
			}
			
			uni.uploadFile({
				url: enums.uploadUrl,
				filePath: file,
				name: 'file',
				header:header,
				success: (res) => {
					let resData = {}

					if (res.statusCode == 200) {
						//代表数据请求正常--直接返回报文信息
						resData = res.data
						// #ifndef MP-WEIXIN
						let log = options.url + '====params==' + JSON.stringify(formatData(
							options.data)) + '===' + JSON.stringify(resData)
						console.log(log)
						// #endif



						if (resData.code != 1 && resData.msg) {
							uni.showToast({
								icon: 'none',
								title: resData.msg
							})
						}
					} else if (res.statusCode == 401) {
						common.loginFailure()
					} else if (res.statusCode == 500) {

						//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
						resData = res.data
						// #ifndef MP-WEIXIN
						let log = options.url + '====params==' + JSON.stringify(formatData(
							options.data)) + '===' + JSON.stringify(resData)
						console.log(log)
						// #endif

					} else {

						// #ifndef MP-WEIXIN
						console.log(options.url + '====' + res.statusCode)
						// #endif

					}
					resolve(resData);
				},
				fail: (err) => {
					reject(err)
				},

			});

		})
	},
	postJSONJAVA: (options = {
		url: '',
		data: {},
		deleteEmptyFlag:'',
		jsonFlag:''
	}) => {
		return new Promise((resolve, reject) => {
			let url = mergeJavaUrl(options.url);
			let header = {
				// 'Content-Type': 'application/json;charset=UTF-8',
				'Content-Type': 'application/x-www-form-urlencoded',
			}
			if(options.jsonFlag == 1){
				header['Content-Type'] = 'application/json;charset=UTF-8'
			}
			let token = uni.getStorageSync('token')
			if (token) {
				header.token = token
			}
			let delteFlag = options.deleteEmptyFlag
			let deleteValFlag = delteFlag?delteFlag:'1'
			let dataParams = options.data
			if(deleteValFlag == '1'){
				dataParams = formatData(options.data)
			}
			//是否显示错误msg提示
			let showMsgFlag = options.showMsg?options.showMsg:'1'

			uni.request({
				url: url,
				method: 'POST',
				data: dataParams,
				header: header,
				success: res => {
					let resData = {}

					if (res.statusCode == 200) {
						//代表数据请求正常--直接返回报文信息
						resData = res.data
						if(resData.result == 'true'){
							resData.code = '1'
						}
						// #ifndef MP-WEIXIN
						let log = options.url + '====params==' + JSON.stringify(formatData(
							options.data)) + '===' + JSON.stringify(resData)
						console.log(log)
						// #endif

						if (resData.result == 'false' && resData.message && showMsgFlag == '1') {
							// uni.showToast({
							// 	icon: 'none',
							// 	title: resData.message,
							// 	duration:5000
							// })
						}
						
					} else if (res.statusCode == 401) {
						common.loginFailure()
					} else if (res.statusCode == 500) {

						//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
						resData = res.data
						// uni.showToast({
						// 	icon: 'none',
						// 	title: resData.msg,
						// 	duration:5000
						// })
						// #ifndef MP-WEIXIN
						let log = options.url + '====params==' + JSON.stringify(formatData(
							options.data)) + '===' + JSON.stringify(resData)
						console.log(log)
						// #endif

					} else {

						// #ifndef MP-WEIXIN
						console.log(options.url + '====' + res.statusCode)
						// #endif

					}
					console.log('resData',resData)
					resolve(resData);
				},
				fail: (err) => {
					reject(err)
				},
				complete: () => {}
			});
		})
	},
	postJSON: (options = {
		url: '',
		data: {},
		deleteEmptyFlag:''
	}) => {
		return new Promise((resolve, reject) => {
			let url = mergeUrl(options.url);
			let header = {
				'Content-Type': 'application/json;charset=UTF-8',
				'Content-Type': 'application/x-www-form-urlencoded',
			}
			let token = uni.getStorageSync('token')
			if (token) {
				header.token = token
			}
			let delteFlag = options.deleteEmptyFlag
			let deleteValFlag = delteFlag?delteFlag:'1'
			let dataParams = options.data
			if(deleteValFlag == '1'){
				dataParams = formatData(options.data)
			}
			//是否显示错误msg提示
			let showMsgFlag = options.showMsg?options.showMsg:'1'

			uni.request({
				url: url,
				method: 'POST',
				data: dataParams,
				header: header,
				success: res => {
					let resData = {}

					if (res.statusCode == 200) {
						//代表数据请求正常--直接返回报文信息
						resData = res.data
						// #ifndef MP-WEIXIN
						let log = options.url + '====params==' + JSON.stringify(formatData(
							options.data)) + '===' + JSON.stringify(resData)
						console.log(log)
						// #endif


						if (resData.code != 1 && resData.msg && showMsgFlag == '1') {
							uni.showToast({
								icon: 'none',
								title: resData.msg,
								duration:5000
							})
						}
					} else if (res.statusCode == 401) {
						common.loginFailure()
					} else if (res.statusCode == 500) {

						//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
						resData = res.data
						uni.showToast({
							icon: 'none',
							title: resData.msg,
							duration:5000
						})
						// #ifndef MP-WEIXIN
						let log = options.url + '====params==' + JSON.stringify(formatData(
							options.data)) + '===' + JSON.stringify(resData)
						console.log(log)
						// #endif

					} else {

						// #ifndef MP-WEIXIN
						console.log(options.url + '====' + res.statusCode)
						// #endif

					}
					
					resolve(resData);
				},
				fail: (err) => {
					reject(err)
				},
				complete: () => {}
			});
		})
	},

	// put: (options = {
	// 	url: '',
	// 	data: {}
	// }) => {
	// 	return new Promise((resolve, reject) => {
	// 		let url = mergeUrl(options.url);
	// 		uni.request({
	// 			url: url,
	// 			method: 'PUT',
	// 			data: formatData(options.data),
	// 			header: {
	// 				// 'ACCESS-TOKEN': uni.getStorageSync('token'),
	// 				'content-type': 'application/json'
	// 			},
	// 			success: res => {
	// 				let resData = {}
	// 				if (res.statusCode == 200) {
	// 					//代表数据请求正常--直接返回报文信息
	// 					resData = res.data
	// 				} else if (res.statusCode == 500) {
	// 					//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
	// 					resData = res.data
	// 				}
	// 				resolve(resData);
	// 			},
	// 			fail: (err) => {
	// 				reject(err)
	// 			},
	// 			complete: () => {}
	// 		});
	// 	})
	// },
	// uploadfile: (options = {
	// 	url:'',
	// 	filePath: '',
	// 	fileName:''
	// }) => {
	// 	return new Promise((resolve, reject) => {

	// 		let url = options.url?mergeUrl(options.url):UploadUrl;
	// 		let formData = {}
	// 		if(options.fileName){
	// 			let fileInfo = options.fileName.split('.')
	// 			if(fileInfo[1] != 'mp4' || fileInfo[1] != 'MP4'){
	// 				formData.fileName = fileInfo[0]+'.mp4'
	// 			}else{
	// 				formData.fileName = options.fileName
	// 			}
	// 		}


	// 		uni.uploadFile({
	// 			url: url,
	// 			filePath: options.filePath,
	// 			name: 'file',
	// 			formData:formData,
	// 			success: (res) => {
	// 				var data = JSON.parse(res.data)
	// 				resolve(data)
	// 			},
	// 			fail() {
	// 				resolve({
	// 					'filePath': ''
	// 				})
	// 			}
	// 		});
	// 	})
	// },

	// delete: (options = {
	// 	url: '',
	// 	data: {}
	// }) => {
	// 	return new Promise((resolve, reject) => {
	// 		let url = mergeUrl(options.url);
	// 		uni.request({
	// 			url: url,
	// 			method: 'DELETE',
	// 			data: formatData(options.data),
	// 			header: {
	// 				// 'ACCESS-TOKEN': uni.getStorageSync('token'),
	// 				'content-type': 'application/json'
	// 			},
	// 			success: res => {
	// 				let resData = {}
	// 				if (res.statusCode == 200) {
	// 					//代表数据请求正常--直接返回报文信息
	// 					resData = res.data
	// 				} else if (res.statusCode == 500) {
	// 					//说明请求数据有误 --如需公共处理可以在这边直接处理  需要页面单独处理的可在页面根据code处理
	// 					resData = res.data
	// 				}
	// 				resolve(resData);
	// 			},
	// 			fail: (err) => {
	// 				reject(err)
	// 			},
	// 			complete: () => {}
	// 		});
	// 	})
	// }
}

export default http;

Vue.prototype.$http = http;
